package cliente.gerenciadorcliente.rn;

import java.rmi.RemoteException;
import java.util.List;

import cliente.gerenciadorcliente.so.SOGerenciadorClienteSaida;

import comum.rn.RNDescricaoSalaJogo;
import comum.rn.RNEstatisticas;
import comum.so.exception.SalaCheiaException;
import comum.so.exception.SalaComNomeJaExistenteException;
import comum.so.exception.SalaNaoExisteException;
import comum.so.exception.SenhaIncorretaException;

public class RNSalaPrincipal {
	private String identificador;
	private SOGerenciadorClienteSaida gerenciadorClienteSaida;

	public RNSalaPrincipal(String identificador,
			SOGerenciadorClienteSaida gerenciadorClienteSaida) {
		this.setIdentificador(identificador);
		this.setGerenciadorClienteSaida(gerenciadorClienteSaida);
	}

	public void deslogar() {
		getGerenciadorClienteSaida().deslogar();
	}

	public List<RNDescricaoSalaJogo> buscarSalasJogo(boolean mostrarCheios,
			boolean mostrarComSenha) throws RemoteException {
		return getGerenciadorClienteSaida().buscarSalasJogo(mostrarCheios,
				mostrarComSenha);
	}

	public void criarSalaJogo(String nome, String senha)
			throws RemoteException, SalaComNomeJaExistenteException {
		getGerenciadorClienteSaida().criarSalaJogo(nome, senha);
	}

	public RNEstatisticas obterEstatisticas() throws RemoteException {
		return getGerenciadorClienteSaida().obterEstatisticas();
	}

	public void entrarSalaJogo(Long idSalaJogo, String senha)
			throws RemoteException, SalaCheiaException, SalaNaoExisteException,
			SenhaIncorretaException {
		getGerenciadorClienteSaida().entrarSalaJogo(idSalaJogo, senha);
	}

	public String getIdentificador() {
		return identificador;
	}

	protected void setIdentificador(String identificador) {
		this.identificador = identificador;
	}

	protected SOGerenciadorClienteSaida getGerenciadorClienteSaida() {
		return gerenciadorClienteSaida;
	}

	protected void setGerenciadorClienteSaida(SOGerenciadorClienteSaida gerenciadorClienteSaida) {
		this.gerenciadorClienteSaida = gerenciadorClienteSaida;
	}
}